package h0706;

import java.util.*;

/**
 * @author 不知名帅哥
 * @version 1.0
 * @description 总共有 n 个人在机房，每个人有一个标号（1<=标号<=n），他们分成了多个团队，需要你根据收到的 m 条消息判定指定的两个人是否在一个团队中，具体的：
 * 消息构成为 a b c，整数 a、b 分别代表两个人的标号，整数 c 代表指令
 * c == 0 代表 a 和 b 在一个团队内
 * c == 1 代表需要判定 a 和 b 的关系，如果 a 和 b 是一个团队，输出一行’we are a team’,如果不是，输出一行’we are not a team’
 * c 为其他值，或当前行 a 或 b 超出 1~n 的范围，输出‘da pian zi’
 * @date 2024/7/6 12:04
 */
public class WeAreATeam {

    //每个数字对应的集合
    static Map<Integer, Set<Integer>> map = new HashMap<>();
    //存储所有的集合
    List<Set<Integer>> sets = new ArrayList<>();

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[][] array = new int[m][3];
        if (n >= 1 && m < 100000) {
            for (int i = 0; i < m; i++) {
                array[i][0] = sc.nextInt();
                array[i][1] = sc.nextInt();
                array[i][2] = sc.nextInt();
            }
            getResult(array, n, m);
        } else {
            System.out.println("NULL");
        }

        sc.close();
    }

    //思路，当有输入C=0的时候，看是否跟已经生成的集合有重合，或者说包含在已经生成的集合里面。需要合并。
    //c=0,合并操作，C=1,查询操作。
    //使用并查集实现是否在同一个集合。
    private static void getResult(int[][] array, int n, int m) {

        //构造并查集
        UnionFindSet set = new UnionFindSet(n+1); //之所以加一是因为数组是从0开始的
        for (int i = 0; i < m; i++) {
            int a = array[i][0];
            int b = array[i][1];
            int c = array[i][2];
            if (a > n && a < 1 || b > n && b < 1 || c != 0 && c != 1) {
                System.out.println("da pian zi");
            } else if (c == 0) {
                set.union(a, b);
//                System.out.println("we are a team");    //等于0不用输出
            } else if (c == 1) {//c==1的时候就需要判断了。
                if (set.findParent(a) == set.findParent(b)) {
                    System.out.println("we are a team");
                } else {
                    System.out.println("we are not a team");
                }
            }
        }
    }

    //合并操作
    private static void unionSets(int a, int b) {
        //a对应的集合
        Set<Integer> setA = map.get(a);
        //b对应的集合
        Set<Integer> setB = map.get(b);
        //假如是刚开始均为null
        if (setA == null && setB == null) {
            setA = new HashSet<>();
            Collections.addAll(setA, a, b);
        } else if (setA != null && setB == null) {
//            setB=new HashSet<>(setA);                   //不等于，setA不等于null
        } else if (setA == null && setB != null) {
            setA = new HashSet<>(setB);
        } else {
            setA.addAll(setB);
        }

        setB = new HashSet<>(setA);

        map.put(a, setA);
        map.put(b, setB);
    }

    //查询操作
    private static boolean findSet(int a, int b) {
        //a对应的集合
        Set<Integer> setA = map.get(a);
        //b对应的集合
        Set<Integer> setB = map.get(b);

        return setA.equals(setB);
    }
}
